/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package client.controllers;

import client.gui.controls.TekenPaneel;
import client.gui.*;
import client.communication.ClientCommunication;
import org.apache.log4j.Logger;

/**
 *
 * @author 
 */
public class GalgjeController {
    
    private static GalgjeController instance = new GalgjeController();
    private char [] fouteLetters;
    private int aantalFouteLetters;
    private boolean verloren,gewonnen;
    private int score;
    private String woord,gevondenWoord;
    private Logger logger = Logger.getLogger(GalgjeController.class);
    private Galgje galgjeclient;
    private TekenPaneel tp;
    
    private GalgjeController(){
        
    }
    
    public void reset(){
        aantalFouteLetters = 0;
        fouteLetters = new char[7];
        verloren = false;
        gewonnen = false;
        gevondenWoord = "";
        woord = "";
        ClientCommunication.getInstance().getRandomWoord();
    }
    
    public static GalgjeController getInstance() {
        return instance;
    }
    
    //indien foute gok letter toevoegen aan lijst met foute letters
    //en aantal foute letters verhogen max 6 foute letters anders spel afgelopen
    public void addFouteLetter(char letter){
        if(aantalFouteLetters == 0){
            fouteLetters[aantalFouteLetters] = letter;
            aantalFouteLetters++;
            tp.repaint();
        }else if(getAantalFouteLetters() < 6){
            int j = 0;
            while(j < aantalFouteLetters && fouteLetters[j] != letter){
                j++;
            }
            if(j >= aantalFouteLetters){
                fouteLetters[aantalFouteLetters] = letter;
                aantalFouteLetters++;
                tp.repaint();
            }
        } else {
            aantalFouteLetters++;
            verloren = true;
            tp.repaint();
        }
    }
    
    public void testLetter(char letter,String w,int p){
        int pos;
        String hulp = w;
        if(hulp.contains(Character.toString(letter))){
            pos = hulp.indexOf(Character.toString(letter))+p;
            gevondenWoord = new String(gevondenWoord.substring(0, pos+1) 
                    + Character.toString(letter)
                    +gevondenWoord.substring(pos+2, gevondenWoord.length()));
            if(pos+1 < hulp.length()){
                hulp = hulp.substring(pos+1, hulp.length());
                testLetter(letter,hulp,pos);
            }
        }
        if(getGevondenWoord().equals(getWoord())){
            gewonnen = true;
        }
    }
    public void testLetter(char letter){
        int pos;
        String hulp = woord;
        if(hulp.contains(Character.toString(letter))){
            pos = hulp.indexOf(Character.toString(letter));
            gevondenWoord = new String(gevondenWoord.substring(0, pos) 
                    + Character.toString(letter)
                    +gevondenWoord.substring(pos+1, gevondenWoord.length()));
            hulp = hulp.substring(pos+1, hulp.length());
            testLetter(letter,hulp,pos);
        }else{
            addFouteLetter(letter);
        }
        if(getGevondenWoord().equals(getWoord())){
            gewonnen = true;
        }
    }

    public char[] getFouteLetters() {
        return fouteLetters;
    }

    public boolean isVerloren() {
        return verloren;
    }

    public boolean isGewonnen() {
        return gewonnen;
    }

    public String getGevondenWoord() {
        return gevondenWoord;
    }

    public String getWoord() {
        return woord;
    }

    public int getAantalFouteLetters() {
        return aantalFouteLetters;
    }
    
    public String fouteLettersToString(){
        String fLetters = "";
        for(int i = 0 ; i < aantalFouteLetters ; i++){
            fLetters = fLetters+fouteLetters[i]+ ", "; 
        }
        return fLetters;
    }
    
    public void setWoord(String woord) {
        this.woord = woord;
        System.out.println(woord);
        for(int i = 0; i < woord.length(); i++){
            gevondenWoord += "*";
        }
        galgjeclient.maakWoordPaneel();
    }

    public void setGalgjeclient(Galgje galgjeclient) {
        this.galgjeclient = galgjeclient;
    }

    public void setTp(TekenPaneel tp) {
        this.tp = tp;
    }

}
